home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
e10_edit.arc
/
ECONFIG.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-03-22
|
7KB
|
282 lines
{Configuration program for E.COM, (C) Jim DeVries, 1990. A limited license is
granted for anyone to use and share this program without charge, but you are
prohibited from selling it or releasing a modified copy without prior written
approval or releasing ECONFIG.EXE without this file}
Program EConfig; uses CRT, Dos;
Const
ProgramLength = 6337;
ConfigStarts = $40; {offset from beginning of file}
{offsets}
cs = 0; {Status line attributes }
ct = 1; {text attributes }
tw = 2; {tab width }
io = 3; {insert / overwrite flag }
ai = 4; {Autoinsert flag }
tm = 5; {text / program mode flag}
lm = 6; {right margin }
rm = 7; {left margin }
stop = 0;
TYPE
BufArray = array[0..ProgramLength-1] of byte;
VAR
Infile, Outfile : file;
Buffer : BufArray;
Cmd : integer;
Function ColorWord(CNum : integer):String;
begin
case CNum of
0: ColorWord:='black ';
1: ColorWord:='blue ';
2: ColorWord:='green ';
3: ColorWord:='cyan ';
4: ColorWord:='red ';
5: ColorWord:='magenta ';
6: ColorWord:='brown ';
7: ColorWord:='white ';
8: ColorWord:='dark grey ';
9: ColorWord:='light blue ';
10: ColorWord:='light green ';
11: ColorWord:='light cyan ';
12: ColorWord:='light red ';
13: ColorWord:='light magenta';
14: ColorWord:='yellow ';
15: ColorWord:='bright white ';
end; {case}
end;
Procedure PickColor(OffSet : Integer; VAR Buffer : BufArray);
var x,y,fore, back : integer;
begin
back:=Buffer[ConfigStarts+OffSet] shr 4;
fore:=Buffer[ConfigStarts+OffSet] and 15;
textcolor(fore);
textbackground(back);
for x:=0 to 3 do
for y:=0 to 3 do
begin
gotoxy(x*15+1,y+21);
write(x*4+y:2,' ',colorword(x*4+y));
end;
textcolor(yellow);
textbackground(blue);
gotoxy(1,20);
clreol;
repeat
gotoxy(1,19);
write('Enter a new foreground color ');
read(fore);
until fore IN [0..15];
repeat
gotoxy(33,19);
write(' Enter a new background color (0..7) ');
read(back);
until back in [0..7];
Buffer[ConfigStarts+Offset]:=back*16+fore;
for y:=19 to 24 do
begin
gotoxy(1,y);
clreol;
end;
end;
Procedure SetTab(VAR Buffer : BufArray);
var Tab : byte;
begin
gotoxy(1,20);
clreol;
gotoxy(1,22);
write('Enter tab width ');
readln(tab);
Buffer[ConfigStarts+TW]:=tab;
gotoxy(1,22);
clreol;
end;
Procedure SetMargins(VAR Buffer : BufArray);
var left, right : byte;
begin
gotoxy(1,20);
clreol;
gotoxy(1,22);
write ('...............................................',
'.................................');
left:=Buffer[ConfigStarts+LM];
right:=Buffer[ConfigStarts+RM];
gotoxy(left,22);
write(chr(16));
gotoxy(right,22);
write(chr(17));
repeat
repeat
gotoxy(1,23);
write('Enter new left margin ');
read(left);
until left in [1..79];
repeat
gotoxy(1,24);
write('Enter new right margin ');
read(right);
until right in [1..80];
if right <= Left then
begin
gotoxy(1,25);
write('The LEFT margin must be to the left of the RIGHT one!!!');
end;
until right > left;
Buffer[ConfigStarts+LM]:=left;
Buffer[ConfigStarts+RM]:=right;
for left:=22 to 25 do
begin
gotoxy(1,left);
clreol;
end;
end;
Procedure OpenFile(VAR Infile:File);
begin
Assign(infile,'E.COM');
reset(infile,1);
BlockRead(infile, buffer, ProgramLength);
close(infile);
end;
Procedure PrintHeading;
begin
clrscr;
gotoxy(1,3);
writeln(' E C O N F I G U R A T I O N');
writeln;
writeln(' E.COM (C) Copyright 1990, David Nye, MD.');
writeln(' ECONFIG.EXE (C) Copyright 1990, Jim DeVries');
writeln;
write ('-----------------------------------------------',
'---------------------------------');
gotoxy(1,9);
writeln(' Currently:');
writeln(' 1. Status line colors.................');
writeln(' 2. Text colors........................');
writeln(' 3. Tab width..........................');
writeln(' 4. Toggle Insert / Overwrite mode.....');
writeln(' 5. Toggle AutoInsert..................');
writeln(' 6. Toggle Program / Text mode.........');
writeln(' 7. Change Margins for text mode.......');
end;
Procedure ShowCurrent(VAR Buffer : BufArray);
var r,l, temp, back, fore : byte;
begin
back:=Buffer[ConfigStarts+CS] shr 4;
fore:=Buffer[ConfigStarts+Cs] and 15;
gotoxy(47,10);
write(ColorWord(fore),' ON ', ColorWord(back));
clreol;
back:=Buffer[ConfigStarts+CT] shr 4;
fore:=Buffer[ConfigStarts+CT] and 15;
gotoxy(47,11);
write(ColorWord(fore),' ON ', ColorWord(back));
clreol;
temp:=Buffer[ConfigStarts+TW];
gotoxy(47,12);
write(Temp);
temp:=Buffer[ConfigStarts+IO];
gotoxy(47,13);
if temp=$FF then Write('INSERT ')
else write('OVERWRITE');
gotoxy(47,14);
temp:=Buffer[ConfigStarts+AI];
If temp=$FF then write('ON ')
else write('OFF');
gotoxy(47,15);
temp:=Buffer[ConfigStarts+TM];
If temp=$FF then write('TEXT MODE ')
else write('PROGRAM MODE');
l:=Buffer[ConfigStarts+LM];
r:=Buffer[ConfigStarts+RM];
gotoxy(47,16);
write(l, ' L & ',r,' R');
gotoxy(1,20);
write(' Change (1..7) Esc to quit');
end;
Procedure GetCommand(VAR Cmd : integer);
var c: char;
begin
repeat
c:=readkey;
until C in ['1'..'7',#27];
If C=#27 then Cmd:=Stop
else Cmd:=Ord(C)-Ord('0');
end;
procedure ProcessCmd(Cmd : Integer; VAR Buffer : BufArray);
begin
Case Cmd of
Stop : Exit;
1: PickColor(CS, Buffer);
2: PickColor(CT, Buffer);
3: SetTab(Buffer);
4: Buffer[ConfigStarts+IO]:= Buffer[ConfigStarts+IO] XOR $FF;
5: Buffer[ConfigStarts+AI]:= Buffer[ConfigStarts+AI] XOR $FF;
6: Buffer[ConfigStarts+TM]:= Buffer[ConfigStarts+TM] XOR $FF;
7: SetMargins(Buffer);
end;
end;
Procedure CloseFile(VAR Buffer : BufArray);
var yn : char;
fn : string;
outfile : file;
begin
gotoxy(1,20);
clreol;
write(' Save changes? [Y/N] ');
repeat
yn:=readkey;
until upcase(yn) IN ['Y','N'];
writeln;
if upcase(yn) = 'N'
then exit
else
begin
write(' Save to E.COM? [Y/N] ');
Repeat
yn:=readkey;
until upcase(yn) in ['Y','N'];
if upcase(YN) = 'N' then
begin
writeln;
write(' Enter new file name: ');
read(fn);
end
else
fn:='E.COM';
end;
assign(outfile,fn);
if fn = 'E.COM' then
reset(outfile, 1)
else
rewrite(outfile);
blockwrite(outfile, Buffer, ProgramLength);
close(outfile);
end;
begin
OpenFile(Infile);
PrintHeading;
repeat
ShowCurrent(buffer);
GetCommand(Cmd);
ProcessCmd(Cmd,Buffer);
until Cmd = Stop;
closefile(buffer);
end.